/* function ajax(type, url, data, fn) {
  //判断
  var xhr = window.XMLHttpRequest ?
    new XMLHttpRequest() :
    new ActiveXObject("Microsoft.XMLHTTP");
  //一般情况下，js里的所谓的键值对形式的数据以一种什么样结构表示 {a:1,b:2}
  //但是，我们再向后台传数据时，以一种什么样的结构表示？a=1&b=2
  //所以，我们要将对象转成字符串

  var str = "";
  for (var i in data) {
    str += i + "=" + data[i] + "&";
  }
  //这样转换之后，会多一个&

  str = str.replace(/&$/, "");


  if (type.toLowerCase() == "get") { //为了避免使用这个封装函数的用户在传递实参时，喜欢用大写或者大小写的情况，导致条件匹配失败
    if (str == "") {
      xhr.open("get", url);
    } else {
      xhr.open("get", url + "?" + str);
    }

    xhr.send();
  } else {
    xhr.open("post", url);
    xhr.setRequestHeader(
      "Content-type",
      "application/x-www-form-urlencoded"
    );
    xhr.send(str);

  }
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status == 200) {
        var data = xhr.responseText;
        fn(data);
      }
    }
  };

} */

function ajax(obj) {
  //判断
  var xhr = window.XMLHttpRequest ?
    new XMLHttpRequest() :
    new ActiveXObject("Microsoft.XMLHTTP");
  //一般情况下，js里的所谓的键值对形式的数据以一种什么样结构表示 {a:1,b:2}
  //但是，我们再向后台传数据时，以一种什么样的结构表示？a=1&b=2
  //所以，我们要将对象转成字符串

  var str = "";
  for (var i in obj.data) {
    str += i + "=" + obj.data[i] + "&";
  }
  //这样转换之后，会多一个&

  str = str.replace(/&$/, "");


  if (obj.type.toLowerCase() == "get") { //为了避免使用这个封装函数的用户在传递实参时，喜欢用大写或者大小写的情况，导致条件匹配失败
    if (str == "") {
      xhr.open("get", obj.url);
    } else {
      xhr.open("get", obj.url + "?" + str);
    }

    xhr.send();
  } else {
    xhr.open("post", obj.url);
    xhr.setRequestHeader(
      "Content-type",
      "application/x-www-form-urlencoded"
    );
    xhr.send(str);

  }
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status == 200) {
        var data = xhr.responseText;
        obj.fn(data);
      }
    }
  };

}